package br.affero.core.person.dao;

import java.io.Serializable;
import java.util.List;

import javax.ejb.TransactionAttribute;
import javax.inject.Named;
import javax.persistence.Query;

import br.affero.core.dao.DataAccess;
import br.affero.core.person.model.Person;

@Named("personDao")
@TransactionAttribute
public class PersonDao extends DataAccess implements Serializable {
	
	/**
     * Obtem todas as pessoas
     * @return
     */
    @SuppressWarnings("unchecked")
    public List<Person> findAll()  {
    	Query query = getEntityManager().createQuery("SELECT p FROM Person p");
        return (List<Person>) query.getResultList();          
    }
    
    /**
     * Obtem pessoa pelo seu identificador
     * @param id identificador banco de dados
     * @return Person - pessoa
     */
    public Person findById(Integer id) {
    	return getEntityManager().find(Person.class,id);
    }
    
    
    /**
     * Salva ou atualiza os dados da pessoa
     * @param person dados da pessoa a serem salvos
     * @return Person pessoa com dados atualizados
     */
    public Person saveOrUpdate(Person person) {
                       
    	if (person.getPersonId() == null) {
    		getEntityManager().persist(person);
    	} else {
    		getEntityManager().merge(person);
    	}
            
        return person;
    }
    
    /**
     * Remove uma pessoa do banco de dados
     * 
     * @param person pessoa a ser removida do banco
     */
    public void delete(Person person) {
           getEntityManager().remove(person);
    }
    
	public void flush() {
		getEntityManager().flush();
	}
}
